package gemsa.servlets.client;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

import gemsa.modeles.ModeleAdministrateur;
import gemsa.modeles.ModeleClient;
import gemsa.modeles.ModeleProjet;
import gemsa.outils.GestionDroit;
import gemsa.outils.Hachage;
import gemsa.beans.Projet;
import gemsa.beans.Client;


/**
 * Classe ServletGestionProjets
 * @author Projet Dev Groupe 33
 * @version 1.0 Pr�finale
 * Modifier un projet
 */
 
@SuppressWarnings("serial")
public class ServletGestionProjets extends HttpServlet 
{
	// Variables
	private DataSource datasource=null;
	private GestionDroit gestionDroit=null;
	
	// Traitements
	public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{		
		// Initialisation de la gestion des droits
		gestionDroit=new GestionDroit(request);
		
		// On autorise uniquement les clients
		if(gestionDroit.estAutorise(false,true,false))
		{	
			// R�cup�rer l'objet datasource du context de la servlet 
			datasource=(DataSource)getServletContext().getAttribute("datasource");
	
			// Action a r�aliser
			String action=(String)request.getParameter("action");
			
			System.out.println("action = " + action);
			
			// Action par d�faut (liste)
			if(action==null || action.equalsIgnoreCase(""))
			{
				action="lister";
			}
			
			if(action.equals("lister"))
			{
				listerProjets(request, response);
			}
			
			if(action.equals("ajouter"))
			{
				ajouterProjet(request, response);
			}
			
			if(action.equals("modifier"))
			{
			//	modifierProjet(request, response);
			}
			
			if(action.equals("validermodification"))
			{
			//	validerModificationProjet(request, response);
			}
			
			// Consulter un projet
			if(action.equals("consulter"))
			{
				consulterProjet(request, response);
			}
			
			// Valider le formulaire de cr�ation d'un compte client
			if(action.equals("validerajout"))
			{	
				validerAjoutProjet(request, response);
			}	
		}
		else
		{
			getServletContext().getRequestDispatcher("/pageFixe?action=erreur&erreurs=Vous n'�tes pas autoris� � afficher cette page!!").forward(request, response);
		}
		
		// Vider l'objet datasource
		this.datasource=null;
	}
	
	
	// Lister les projets
	private void listerProjets(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		// Variables
		ModeleProjet modeleProjet=null;
		int page=0;
		int maxParPage=0;
		String champTri=null;
		String typeTri=null;
		ArrayList<Projet> listeProjets=null;
		Client client=null;
		
		try 
		{
			// On r�cup�re la page demand�e
			page=Integer.parseInt(request.getParameter("page"));
			
			// Si la page vaut 0 ou inf�rieur on prend la valeur 1
			page = Math.max(page, 1);
		}
		catch(Exception e) 
		{
			// Si le param�tre page pass� dans la requ�te n'est pas un nombre on l'initialise � 1
			page=1;
		}
		
		try 
		{
			// On r�cup�re le maximum d'�l�ments a afficher
			maxParPage=Integer.parseInt(request.getParameter("maxParPage"));
			
			// Si le maxParPage est inf�rieur � 5, on prend 5
			maxParPage=Math.max(maxParPage, 5);
		}
		catch(Exception e) 
		{
			// Si le param�tre maxParPage pass� dans la requ�te n'est pas un nombre on l'initialise � 5
			maxParPage=5;
		}
	
		// On r�cup�re le reste des �l�ments de la requete
		champTri=(String)request.getParameter("champTri");
		typeTri=(String)request.getParameter("typeTri");
		
		// Si aucun tri n'est demand�, ou que le tri est incorrect, on r�alise un tri sur l'id du projet
		if(champTri==null || (!champTri.equals("datecreationprojet") && !champTri.equals("etatprojet") && !champTri.equals("totalprojet") && !champTri.equals("id_projet")))
		{
			champTri="id_projet";
		}
		
		// Si aucun type de tri n'est demand�, ou que le type de tri est incorrect, on r�alise un tri croissant
		if(typeTri==null || (!typeTri.equals("ASC") && !typeTri.equals("DESC")))
		{
			typeTri="ASC";
		}

		// On r�cup�re le client en session
		client=(Client)request.getSession().getAttribute("compte");
		
		// On initialise le mod�le
		modeleProjet=new ModeleProjet(datasource);
	
		// On r�cup�re la liste des projets du client
		listeProjets=(ArrayList<Projet>)modeleProjet.listerProjet(client.getId(), maxParPage, page, champTri, typeTri);
		
		// On renvoie � la JSP la liste de obtenue ainsi que les informations de pagination
		request.setAttribute("listeProjets",listeProjets);
		request.setAttribute("maxParPage", modeleProjet.getMaxParPage());
		request.setAttribute("pageActuel", modeleProjet.getPageActuel());
		request.setAttribute("totalElement", modeleProjet.getTotalElement());
		request.setAttribute("champTri", modeleProjet.getChampTri());
		request.setAttribute("typeTri", modeleProjet.getTypeTri());
		
		// On vide cette liste par s�curit�
		listeProjets=null;
	
		// On renvoie � la vue les messages d'erreurs et ou de succ�s
		request.setAttribute("succes",(String)request.getParameter("succes"));
		request.setAttribute("erreurs",(String)request.getParameter("erreurs"));
		
		// On renvoie � l'historique
		getServletContext().getRequestDispatcher("/vues/utilisateurs/listeprojets.jsp").forward(request,response);
	}
	
	
	// Ajouter un projet
	private void ajouterProjet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException
	{
		// Le client ne doit pas pouvoir cr�er un projet s'il n'est pas authentifié 
		if(request.getSession().getAttribute("compte") == null)
		{
			// Renvoi vers la consultation du compte du client
			getServletContext().getRequestDispatcher("/gestionClient?action=ajouter").forward(request, response);
		}
		else
		{
			// Renvoi vers la page de cr�ation de projet (fiche descriptive)
			getServletContext().getRequestDispatcher("/vues/utilisateurs/fichedescriptive.jsp").forward(request, response);
		}
	}
	
	// Ajouter un projet
	private void ajouterProjetBis(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		// Variables
		Projet historique=null;
		ModeleProjet modeleProjet=null;
		int codeErreur=0;
		Client client=null;

		// On initialise le mod�le
		modeleProjet=new ModeleProjet(datasource);
		
		// On r�cup�re l'historique en session
		historique=(Projet)request.getSession().getAttribute("historique");
		
		// On r�cup�re le client en session
		client=(Client)request.getSession().getAttribute("compte");
			
		// Si n'est pas vide on l'ajoute � la base de donn�es
		if(historique.getTotal()>0)
		{
			// On ajoute le projet � la base de données
			codeErreur=modeleProjet.ajouterProjet(historique, client.getId());
			
			// On teste le code de retour pour afficher un message de succ�s ou d'erreur
			if(codeErreur!=1)
			{
				// On renvoie sur l'historique avec un message d'erreur
				response.sendRedirect("gestionHistorique?action=lister&erreurs=" + "Une erreur s'est produite durant l'ajout de votre projet");
			}
			else
			{
				// On cr�e un nouveau historique
				request.getSession().setAttribute("historique",new Projet());
				
				// On renvoie � la page de liste des projets avec un message de succ�s
				response.sendRedirect("gestionProjets?action=lister&succes=" + "Vos réponses ont été prises en compte. Vous pouvez maintenant consulter l'�valuation de votre projet.");
			}
		}
		else
		{
			// On renvoie sur l'historique avec un message d'erreur
			response.sendRedirect("gestionHistorique?action=lister&erreurs=" + "Votre historique est vide");
		}
	}


	// Validater ajouter projet
	private void validerAjoutProjet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException
	{
		
//		if (valuesFinancement != null) {
//			for (String s : valuesFinancement)
//				System.out.println("valuesFinancement = " + s);
//		} else
//			System.out.println("Pas de financement...");
//		System.out.println("projetnom = " + projetNom);

		// Déclaration variables + récupération requêtes
		int codeErreur=0;
		ModeleClient modeleClient=null;
		ModeleProjet modeleProjet=null;
		ModeleAdministrateur modeleAdministrateur=null;
		Enumeration parametres=null;
		String parametre=null;
		List<String> erreurs=null;
		Projet projet=null;
		Client client=null;
		
		boolean[] financement = new boolean[7];
		boolean[] professionnelSante = new boolean[6];
		boolean[] professionnelSocio = new boolean[7];
		boolean[] domaine = new boolean[5];
		boolean[] population = new boolean[7];
		boolean[] equipement = new boolean[7];
		
		// On r�cup�re le client en session
		client=(Client)request.getSession().getAttribute("compte");
		
		// initialisation des tableaux à false
		for(int i=0; i<7; i++)
		    financement[i] = false;

		for(int i=0; i<6; i++)
			professionnelSante[i] = false;
		
		for(int i=0; i<7; i++)
			professionnelSocio[i] = false;
		
		for(int i=0; i<5; i++)
			domaine[i] = false;
		
		for(int i=0; i<7; i++)
			population[i] = false;
		
		for(int i=0; i<7; i++)
			equipement[i] = false;
		
		// On récupère les paramètres passés par le client
		String projetNom = request.getParameter("projetnom");
		String porteurNom = request.getParameter("porteurnom");
		String porteurInstitution = request.getParameter("porteurinstitution");
		String porteurRegion = request.getParameter("porteurregion");
		String besoinSysteme = request.getParameter("besoinsysteme");
		String apportSysteme = request.getParameter("apportsysteme");
		String[] valuesFinancement = request.getParameterValues("financement");
		String utilisateurFinal = request.getParameter("utilisateurfinal");
		String[] valuesProfessionnelSante = request.getParameterValues("professionnelsante");
		String[] valuesProfessionnelSocio = request.getParameterValues("professionnelsocio");
		String caracteristique = request.getParameter("caracteristique");
		String centreNom = request.getParameter("centrenom");
		String centreNombre = request.getParameter("centrenombre");
		String centrePeriphNombre = request.getParameter("centreperiphnombre");
		String[] valuesDomaine = request.getParameterValues("domaine");
		String specialite = request.getParameter("specialite");
		String[] valuesPopulation = request.getParameterValues("population");
		String application = request.getParameter("application");
		String patientNombre = request.getParameter("patientnombre");
		String[] valuesEquipement = request.getParameterValues("equipement");
		String carac = request.getParameter("carac");
		String tempsVie = request.getParameter("tempsvie");
		String tempsMaturite = request.getParameter("tempsmaturite");
		String tempsFonctionnement = request.getParameter("tempsfonctionnement");
		String tempsActivite = request.getParameter("tempsactivite");
		String tempsFrequence = request.getParameter("tempsfrequence");
		String tempsType = request.getParameter("tempstype");
		String finalite = request.getParameter("finalite");
		String dateDebut = request.getParameter("datedebut");

		// On transforme les tableaux de paramètres en tableaux de booléens
		if(valuesFinancement != null)
		{
			for(String value : valuesFinancement)
			{
			       if(value.equals("financementEuropeen"))
			               financement[0] = true;
			       else if(value.equals("financementNational"))
			               financement[1] = true;
			       else if(value.equals("financementRegional"))
		               financement[2] = true;
			       else if(value.equals("financementLocal"))
		               financement[3] = true;
			       else if(value.equals("financementIndustrie"))
		               financement[4] = true;
			       else if(value.equals("financementAssociation"))
		               financement[5] = true;
			       else if(value.equals("financementAutres"))
		               financement[6] = true;
			}
		}
		
		for(String value : valuesProfessionnelSante)
		{
		       
		       if(value.equals("professionnelSanteMedecin"))
		    	   professionnelSante[0] = true;
		       else if(value.equals("professionnelSanteMedLiberal"))
		    	   professionnelSante[1] = true;
		       else if(value.equals("professionnelSanteInfirmier"))
		    	   professionnelSante[2] = true;
		       else if(value.equals("professionnelSanteAuxiliaire"))
		    	   professionnelSante[3] = true;
		       else if(value.equals("professionnelSanteSageFemme"))
		    	   professionnelSante[4] = true;
		       else if(value.equals("professionnelSanteAutre"))
		    	   professionnelSante[5] = true;
		}
		
		for(String value : valuesProfessionnelSocio)
		{
		       
		       if(value.equals("professionnelSocioAssistantVie"))
		    	   professionnelSocio[0] = true;
		       else if(value.equals("professionnelSocioGardeMalde"))
		    	   professionnelSocio[1] = true;
		       else if(value.equals("professionnelSocioKine"))
		    	   professionnelSocio[2] = true;
		       else if(value.equals("professionnelSocioAideSoignante"))
		    	   professionnelSocio[3] = true;
		       else if(value.equals("professionnelSocioAideMenagere"))
		    	   professionnelSocio[4] = true;
		       else if(value.equals("professionnelSocioPedicure"))
		    	   professionnelSocio[5] = true;
		       else if(value.equals("professionnelSocioAutre"))
		    	   professionnelSocio[6] = true;
		}
		
		for(String value : valuesDomaine)
		{
		       
		       if(value.equals("domaineConsultation"))
		    	   domaine[0] = true;
		       else if(value.equals("domaineSurveillance"))
		    	   domaine[1] = true;
		       else if(value.equals("domaineAssistance"))
		    	   domaine[2] = true;
		       else if(value.equals("domaineIntervention"))
		    	   domaine[3] = true;
		       else if(value.equals("domaineAutre"))
		    	   domaine[4] = true;
		}
		
		for(String value : valuesPopulation)
		{
		       
		       if(value.equals("populationAll"))
		    	   population[0] = true;
		       else if(value.equals("populationEnfants"))
		    	   population[1] = true;
		       else if(value.equals("populationAdultes"))
		    	   population[2] = true;
		       else if(value.equals("populationSenior"))
		    	   population[3] = true;
		       else if(value.equals("populationHandicap"))
		    	   population[4] = true;
		       else if(value.equals("populationMalade"))
		    	   population[5] = true;
		       else if(value.equals("populationAutre"))
		    	   population[6] = true;
		}
		
		for(String value : valuesEquipement)
		{
		       
		       if(value.equals("equipementSurPatient"))
		    	   equipement[0] = true;
		       else if(value.equals("equipementChezPatient"))
		    	   equipement[1] = true;
		       else if(value.equals("equipementInstitution"))
		    	   equipement[2] = true;
		       else if(value.equals("equipementCabinet"))
		    	   equipement[3] = true;
		       else if(value.equals("equipementStructureSoin"))
		    	   equipement[4] = true;
		       else if(value.equals("equipementTiers"))
		    	   equipement[5] = true;
		       else if(value.equals("equipementAutre"))
		    	   equipement[6] = true;
		}


			
		// Initialisation de la collection d'erreurs
		erreurs=new ArrayList<String>();
		
		// Initialisation des mod�les
		modeleClient=new ModeleClient(this.datasource);
		modeleAdministrateur=new ModeleAdministrateur(this.datasource);
		modeleProjet=new ModeleProjet(this.datasource);
		
		if (valuesFinancement != null) 
		{
		for (String s : valuesFinancement)
			System.out.println("valuesFinancement = " + s);
		} 
		else
		System.out.println("Pas de financement...");
		
		if (valuesProfessionnelSante != null) 
		{
		for (String s : valuesProfessionnelSante)
			System.out.println("valuesFinancement = " + s);
		} 
		else
		System.out.println("Pas de financement...");
		
		if (valuesProfessionnelSocio != null) 
		{
		for (String s : valuesProfessionnelSocio)
			System.out.println("valuesFinancement = " + s);
		} 
		else
		System.out.println("Pas de financement...");
		
		if (valuesDomaine != null) 
		{
		for (String s : valuesDomaine)
			System.out.println("valuesFinancement = " + s);
		} 
		else
		System.out.println("Pas de financement...");
		
		if (valuesPopulation != null) 
		{
		for (String s : valuesPopulation)
			System.out.println("valuesFinancement = " + s);
		} 
		else
		System.out.println("Pas de financement...");
		
		if (valuesEquipement != null)
		{
		for (String s : valuesEquipement)
			System.out.println("valuesFinancement = " + s);
		} 
		else
		System.out.println("Pas de financement...");

		// On v�rifie que le pr�nom est renseign�
		if(projetNom.equals("") || projetNom==null)
		{
			erreurs.add("Le paramètre [projetNom] est vide");
		}
		else if(!projetNom.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [projetNom] contient une erreur de syntaxe");
		}
			
		// On v�rifie que le pr�nom est renseign�
		if(porteurNom.equals("") || porteurNom==null)
		{
			erreurs.add("Le paramètre [porteurNom] est vide");
		}
		else if(!porteurNom.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [porteurNom] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(porteurInstitution.equals("") || porteurInstitution==null)
		{
			erreurs.add("Le paramètre [porteurInstitution] est vide");
		}
		else if(!porteurInstitution.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [porteurInstitution] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(porteurRegion.equals("") || porteurRegion==null)
		{
			erreurs.add("Le paramètre [porteurRegion] est vide");
		}
		else if(!porteurRegion.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [porteurRegion] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(besoinSysteme.equals("") || besoinSysteme==null)
		{
			erreurs.add("Le paramètre [besoinSysteme] est vide");
		}
		else if(!besoinSysteme.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [besoinSysteme] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(apportSysteme.equals("") || apportSysteme==null)
		{
			erreurs.add("Le paramètre [apportSysteme] est vide");
		}
		else if(!apportSysteme.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [apportSysteme] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(utilisateurFinal.equals("") || utilisateurFinal==null)
		{
			erreurs.add("Le paramètre [utilisateurFinal] est vide");
		}
		else if(!utilisateurFinal.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [utilisateurFinal] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(caracteristique.equals("") || caracteristique==null)
		{
			erreurs.add("Le paramètre [caracteristique] est vide");
		}
		else if(!caracteristique.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [caracteristique] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(centreNom.equals("") || centreNom==null)
		{
			erreurs.add("Le paramètre [centreNom] est vide");
		}
		else if(!centreNom.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [centreNom] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(centreNombre.equals("") || centreNombre==null)
		{
			erreurs.add("Le paramètre [centreNombre] est vide");
		}
		else if(!centreNombre.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [centreNombre] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(centrePeriphNombre.equals("") || centrePeriphNombre==null)
		{
			erreurs.add("Le paramètre [centrePeriphNombre] est vide");
		}
		else if(!centrePeriphNombre.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [centrePeriphNombre] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(specialite.equals("") || specialite==null)
		{
			erreurs.add("Le paramètre [specialite] est vide");
		}
		else if(!specialite.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [specialite] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(application.equals("") || application==null)
		{
			erreurs.add("Le paramètre [application] est vide");
		}
		else if(!application.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [application] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(patientNombre.equals("") || patientNombre==null)
		{
			erreurs.add("Le paramètre [patientNombre] est vide");
		}
		else if(!patientNombre.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [patientNombre] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(carac.equals("") || carac==null)
		{
			erreurs.add("Le paramètre [carac] est vide");
		}
		else if(!carac.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [carac] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(tempsVie.equals("") || tempsVie==null)
		{
			erreurs.add("Le paramètre [tempsVie] est vide");
		}
		else if(!tempsVie.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [tempsVie] contient une erreur de syntaxe");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(dateDebut.equals("") || dateDebut==null)
		{
			erreurs.add("Le paramètre [dateDebut] est vide");
		}
		else if(!dateDebut.matches("\\p{L}+([ -]?\\p{L}+)+"))
		{
			erreurs.add("Le paramètre [dateDebut] contient une erreur de syntaxe");
		}
		

		// On v�rifie que le pr�nom est renseign�
		if(valuesEquipement.equals("") || valuesEquipement==null)
		{
			erreurs.add("Le paramètre [valuesEquipement] est vide");
		}

		
		// On v�rifie que le pr�nom est renseign�
		if(valuesPopulation.equals("") || valuesPopulation==null)
		{
			erreurs.add("Le paramètre [valuesPopulation] est vide");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(valuesDomaine.equals("") || valuesDomaine==null)
		{
			erreurs.add("Le paramètre [valuesDomaine] est vide");
		}

		// On v�rifie que le pr�nom est renseign�
		if(valuesProfessionnelSocio.equals("") || valuesProfessionnelSocio==null)
		{
			erreurs.add("Le paramètre [valuesProfessionnelSocio] est vide");
		}
	
		
		// On v�rifie que le pr�nom est renseign�
		if(valuesProfessionnelSante.equals("") || valuesProfessionnelSante==null)
		{
			erreurs.add("Le paramètre [valuesProfessionnelSante] est vide");
		}
		
		// On v�rifie que le pr�nom est renseign�
		if(valuesFinancement.equals("") || valuesFinancement==null)
		{
			erreurs.add("Le paramètre [valuesFinancement] est vide");
		}
		
		
		// On regarde le nombre d'erreurs, s'il y en a au moins une on retourne à la page de création de projet
		if(erreurs.size()>0)
		{
			// On ajoute tous les attributs du formulaire dans la requ�te
			parametres=request.getParameterNames();
			while (parametres.hasMoreElements()) 
			{
				parametre=(String)parametres.nextElement();
			    request.setAttribute(parametre,(String)request.getParameterValues(parametre)[0]);
			}
			
			// On ajoute la collection d'erreurs
			request.setAttribute("erreurs", erreurs);
			
			// On renvoie � la vue de cr�ation de projet
			getServletContext().getRequestDispatcher("/vues/utilisateurs/fichedescriptive.jsp").forward(request,response);
		}
		
		// Si aucune erreur, on ajoute le client � la base de donn�es
		else
		{
			// Initialisation du projet
			projet=new Projet();

			// On d�finit les attributs du projet
			projet.setProjetNom(projetNom);
			projet.setPorteurNom(porteurNom);
			projet.setPorteurInstitution(porteurInstitution);
			projet.setPorteurRegion(porteurRegion);
			projet.setBesoinSysteme(besoinSysteme);
			projet.setApportSysteme(apportSysteme);
			projet.setUtilisateurFinal(utilisateurFinal);
			projet.setCaracteristique(caracteristique);
			projet.setCentreNom(centreNom);
			projet.setCentreNombre(centreNombre);
			projet.setCentrePeriphNombre(centrePeriphNombre);
			projet.setSpecialite(specialite);
			projet.setApplication(application);
			projet.setPatientNombre(patientNombre);
			projet.setCarac(carac);
			projet.setTempsVie(tempsVie);
			projet.setTempsMaturite(tempsMaturite);
			projet.setTempsFonctionnement(tempsFonctionnement);
			projet.setTempsActivite(tempsActivite);
			projet.setTempsFrequence(tempsFrequence);
			projet.setTempsType(tempsType);
			projet.setFinalite(finalite);
			projet.setDateDebut(dateDebut);
			projet.setFinancement(financement);
			projet.setProfessionnelSante(professionnelSante);
			projet.setProfessionnelSocio(professionnelSocio);
			projet.setDomaine(domaine);
			projet.setPopulation(population);
			projet.setEquipement(equipement);

			
			// On ajoute le projet à la base de donn�es, renvoi 1 si l'ajout s'est déroulé avec succès
			codeErreur=modeleProjet.creerProjet(client.getId(), projet);
			
			// On teste le code de retour pour afficher un message de succ�s ou d'erreur
			if(codeErreur!=1)
			{		
				// On renvoie � la page d'index utilisateur avec un message d'erreur
				response.sendRedirect("pageFixe?action=index&erreurs=" + "Une erreur s'est produite durant la création de votre projet. Veuillez recommencer");
			}
			else
			{	
				// On renvoie � la page d'index utilisateur avec un message d'erreur
				response.sendRedirect("pageFixe?action=index&succes=" + "Votre projet a été créé avec succès. Vous pouvez maintenant répondre au questionnaire");
			}
		}
	}
	
	
	
	// Consulter un projet
	private void consulterProjet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		// Variables
		Projet projet=null;
		ModeleProjet modeleProjet=null;
		int idProjet=0;
		Client client=null;

		try
		{
			// On r�cup�re le projet
			idProjet=Integer.parseInt(request.getParameter("idProjet"));
		}
		catch(Exception e) 
		{
			// Le projet n'existe pas
			idProjet=0;
		}
		
		// On r�cup�re le client en session
		client=(Client)request.getSession().getAttribute("compte");
		
		// On initialise le mod�le
		modeleProjet=new ModeleProjet(datasource);
		
		// On r�cup�re le projet depuis le mod�le : renvoie null s'il n'existe pas
		projet=modeleProjet.consulterProjet(client.getId(), idProjet);
		
		// Si le projet n'existe pas, on renvoie sur la page liste des projets
		if(projet!=null)
		{
			// On ajoute le projet � la requete
			request.setAttribute("projet", projet);
			
			// On redirige sur la vue de consultation du projet
			getServletContext().getRequestDispatcher("/vues/utilisateurs/consulterprojet.jsp").forward(request,response);
		}
		else
		{
			// On renvoie sur la liste des projets du client avec un message d'erreur
			response.sendRedirect("gestionProjets?action=lister&erreurs=" + "Ce projet n'existe pas");
		}
	}
	
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		doGet(request, response);
	}
		
}